from framework.base_page import BasePage
from selenium.webdriver.common.by import By
from framework.public_class import *


class UpDatePage(BasePage):
    """更新相关操作"""

    def click_update(self):
        """点击顶部更新"""
        self.scroll_window(location="top")  # 移动屏幕到顶部
        self.element_click(selector="xpath=>//a[@href='/gengxin/']")  # 点击更新

    # 等待更新页的更新漫画显示出来
    def wait_update_comic_is_visible(self):
        return self.is_visible(locator=(By.XPATH, "//li[@class='acgn-clearfix item']"))

    # 点击第一个漫画名
    def click_comic_name(self):
        self.element_click(selector="class=>comic-name")

    # 切换当前driver
    @staticmethod
    def switch_window_to_comic_detail_or_update(detail_or_update="detail"):
        # 获得打开的所有的窗口句柄
        windows = driver.window_handles
        if detail_or_update == "detail":
            # 跳转到漫画详情页窗口
            driver.switch_to.window(windows[-1])
        elif detail_or_update == "update":
            driver.close()  # 先关闭漫画详情页，再切换到更新页
            driver.switch_to_window(windows[0])
        else:
            raise Exception("detail_or_update must be detail or update")

    # 等待漫画详情页的漫画名显示出来
    def wait_comic_name_is_visible(self):
        return self.is_visible(locator=(By.XPATH, "//h1[@class='title']"))


class RankPage(BasePage):
    """排行榜相关操作"""

    # 点击排行进入排行榜页面
    def click_paihang(self):
        self.element_click(selector="xpath=>//a[@href='/top/']")

    # 等待题材分类下的第一个漫画显示出来
    def wait_comic_is_visible(self):
        return self.is_visible(
            locator=(By.XPATH,
                     "//div[@class='J_sortContainer acgn-rank-sort-container acgn-clearfix']/div[1]/ul/li[1]"))

    # 查找排行榜榜单分类，阅读榜，排行榜，打赏榜，收藏榜，月票榜，评分榜
    def find_rank_list(self):
        return self.find_elements(selector="xpath=>//ul[@class='acgn-rank-list acgn-clearfix']/li")

    # 查找 排行题材分类，剧情、地区、进度、色彩、杂志、专题
    def find_rank_sort(self):
        return self.find_elements(selector="xpath=>//ul[@class='J_rankList acgn-rank-sort']/li")

    # 切换窗口到点击的新窗口，并关闭原窗口
    @staticmethod
    def switch_window_to_new_rank_page():
        windows = driver.window_handles
        driver.close()  # 关闭原排行榜窗口
        driver.switch_to.window(windows[-1])  # 切换窗口到点击的新窗口
